<!DOCTYPE html>
<html lang="en">
	<head>
		<title>Recaf - modern bytecode editor</title>
		<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
		<meta name="viewport" content="width=device-width">
		<meta name="description" content="Recaf is a modern java bytecode editor using Objectweb's ASM and JavaFX.">
		<meta name="keywords" content="java,bytecode,editor,recaf,reverse engineering">
		<link rel="icon" type="image/x-icon" href="favicon.ico"/>
		<link href="https://fonts.googleapis.com/css?family=Roboto:300" rel="stylesheet">
		<link rel="stylesheet" href="css/style.css">
		<link rel="stylesheet" href="css/code.css">
		<link rel="stylesheet" href="css/table.css">
		<link rel="stylesheet" href="css/compare.css">
		<!-- 
		Only used on this page. 
		Hack, but better IMO than redesigning the entire table...
		Gotta keep that SEO up.
		-->
		<style>
		.scroll {
			overflow-x: scroll;
		}
		</style>
	</head>
	<body>
		<header>
			<div class="beam container-wide">
				<div class="box-left">
					<a href="index.html"><div class="logo"></div></a>
				</div>
				<div class="box-right">
					<nav>
						<a href="index.html">Home</a>
						<a href="documentation.html">Documentation</a>
						<a href="features.html" class="current">Features</a>
						<a href="https://github.com/Col-E/Recaf">Github</a>
					</nav>
				</div>
			</div>
		</header>
		<section id="content">
			<h1 id="tcs">Comparing popular editors</h1>
			<div class="mobile">
				<p>Scroll to navigate the full table</p>
			</div>
			<br>
			<div class="scroll">
			<table>
				<thead>
					<tr>
						<th></th>
						<th><a href="https://github.com/Col-E/Recaf">Recaf</a></th>
						<th><a href="https://github.com/GraxCode/JByteMod-Beta">JByteMod</a></th>
						<th><a href="https://github.com/Konloch/bytecode-viewer">Bytecode Viewer</a></th>
						<th><a href="http://rejava.sourceforge.net/">reJ</a></th>
						<th><a href="http://set.ee/jbe/">JBE</a></th>
						<th><a href="http://dirty-joe.com/">dirtyJOE</a></th>
					</tr>
				</thead>
				<tbody>
				<tr>
					<th>Supported file types</th>
					<td class="s3">Class, Jar</td>
					<td class="s3">Class, Jar</td>
					<td class="s3">Class, Jar, APK, DEX</td>
					<td class="s3">Class, Jar</td>
					<td class="s2">Class</td>
					<td class="s2">Class</td>
				</tr>
				<tr>
					<th>Latest java support</th>
					<td class="s3">13</td>
					<td class="s3">11</td>
					<td class="s3">13</td>
					<td class="s1">7</td>
					<td class="s1">5</td>
					<td class="s2">8</td>
				</tr>
				<tr>
					<th>Multi-lingual support</th>
					<td class="s3">Supported <i>(See: <a href="https://github.com/Col-E/Recaf/issues/34">Issue 34</a>)</i></td>
					<td class="s3">Supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>Text assembler</th>
					<td class="s3">Supported <i>(See: <a href="assembler.html">Assembler guide</a>)</i></td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s2">Supported<i>(No quality-of-life features)</i></td>
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>Verification tips</th>
					<td class="s3">Supported</td>
					<td class="s3">Supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>Plugin API</th>
					<td class="s3">Supported <i>(See: <a href="plugins.html">Plugins</a>)</i></td>
					<td class="s3">Supported</td>
					<td class="s3">Supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>	
					<td class="s2">Kinda supported <i>(Has limited <a href="http://dirty-joe.com/help/python_scripting.php">scripting functionality</a>)</i></td>
				</tr>
				<tr>
					<th>Editable class attributes</th>
					<td class="s2">Most <i>(Missing: Annotations, Module)</i></td>
					<td class="s2">Most <i>(Missing: Module)</i></td>
					<td class="s2">Most <i>(Changes made by compiling decompiled code)</i></td>
					<td class="s3">All</td>
					<td class="s1">None <i>(Viewable but not editable)</i></td>
					<td class="s3">All</td>
				</tr>
				<tr>
					<th>Editable member attributes</th>
					<td class="s3">Most<i>(Missing: Annotations)</i></td>
					<td class="s3">All</td>
					<td class="s3">All</td>
					<td class="s2">Most <i>(Cannot edit defaultValue, missing signature, missing certain modifiers)</i></td>
					<td class="s2">Some <i>(Missing signature, missing certain access modifiers)</i></td>
					<td class="s2">Some <i>(Missing signature)</i></td>
				</tr>
				<tr>
					<th>Searchable items</th>
					<td class="s3">Strings, constants, declared members, member references, opcode patterns</td>
					<td class="s2">Strings, member references</td>
					<td class="s1">Not supported <i>(Closest thing is the string dumper plugin)</i></td>
					<td class="s2">Strings + Display text <i>(Display search looks for text in the code editor tab.)</i></td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>Remap class and member names</th>
					<td class="s3">Supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>Auto-generated stack-frames</th>
					<td class="s3">Supported <i>(Automatic)</i></td>
					<td class="s2">Supported <i>(Manual)</i></td>
					<td class="s3">Supported <i>(Automatic)</i></td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
				</tr>
				
				<tr>
					<th>Save states &amp; Undo</th>
					<td class="s3">Supported <i>(Create save-states and revert back to them at any time)</i></td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>In-editor help</th>
					<td class="s3">Supported <i>(Jump opcode logic displayed in-editor + mouse-hover tooltips for labels)</i></td>
					<td class="s2">Supported <i>(Opcode table from <a href="https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings">wikipedia</a> shown in separate tab)</i></td>
					<td class="s1">None</td>
					<td class="s1">None</td>
					<td class="s2">Some? <i>(Help button does not seem to work in windows 8+)</i></td>
					<td class="s3">Supported <i>(Has mini-wiki embedded in help menu, contains opcode details and tool usage)</i></td>
				</tr>
				<tr>
					<th>Control flow display</th>
					<td class="s3">Supported <i>(Selecting a jump / switch opcode shows destinations. Selecting a label shows where it is referenced)</i></td>
					<td class="s2">Supported <i>(Control flow graph with simplified opcode logic in "Analysis" page)</i></td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>Decompiler</th>
					<td class="s3">Supported <i>(CFR)</i></td>
					<td class="s3">Supported <i>(Procyon / Fernflower / CFR / Krakatau [crashes])</i></td>
					<td class="s3">Supported <i>(Procyon / CFR / JD-GUI / FernFlower / Krakatau / Smali / Bytecode / Hex)</i></td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>Edit bytecode as decompiled code</th>
					<td class="s3">Supported <i>(Right-click decompiled code to open the menu, select recompile)</i></td>
					<td class="s1">Not supported</td>
					<td class="s3">Supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>	
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>Edit bytecode of running java processes</th>
					<td class="s3">Supported 
					<i>From the navbar, select attach then select a process from the list</i></td>
					<td class="s2">Not supported <i>(Crashes, currently an open issue since 6/5/2018)</i></td>
					<td class="s1">Not supported</td>
					<td class="s2">Not supported? <i>(Can set breakpoints in code editor, does not affect saved output. Can't find usage of it otherwise.)</i></td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
				</tr>
				<tr>
					<th>Edit multiple members concurrently</th>
					<td class="s3">Supported <i>(Each item being edited is given its own window)</i></td>
					<td class="s1">Not supported <i>(Only one item is viewable at a time.)</i></td>
					<td class="s3">Supported <i>(Edit decompiled code, which shows all members)</i></td>
					<td class="s3">Supported <i>(All members displayed in style similar to BytecodeViewer's bytecode display)</i></td>
					<td class="s1">Not supported <i>(Only one item is viewable at a time.)</i></td>
					<td class="s1">Not supported <i>(Only one item is viewable at a time.)</i></td>
				</tr>
				<tr>
					<th>Edit local variable table</th>
					<td class="s3">Supported</td>
					<td class="s3">Supported</td>
					<td class="s3">Supported</td>
					<td class="s1">Not supported</td>
					<td class="s1">Not supported</td>
					<td class="s2">Supported <i>(Missing signature)</i></td>
				</tr>
				<!-- copy paste template
				<tr>
					<th>feature_name</th>
					<td class="s3">Recaf</td>
					<td class="s3">JByteMod</td>
					<td class="s3">BytecodeViewer</td>
					<td class="s3">reJ</td>
					<td class="s3">JBE</td>
					<td class="s3">dirtyJOE</td>
				</tr>
				-->
				</tbody>
			</table>
			</div>
			<p>Last updated: 5/23/2019 <i class="faint">(Month/Day/Year)</i></p>
			<p class="faint"><b>Note</b>: If at any point these points become outdated or if I've made a mistake contact me <i>(contact info on index)</i>.</p>
			<hr>
			<!--
			<p>TODO: In the near future, I'll have some videos that show off some of the different features. Probably a walkthrough of how to use the tool in general too.
			
			tutorial.html
			
			Guide on using the program with some sample jars to follow along with.
			</p>
			-->
		</section>
	</body>
</html>